package com.study.io.nio.demo.channel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * FileChannel
 * Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。
 * 我们无法直接打开一个FileChannel，需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个FileChannel实例。
 *
 * @author wuxj
 */
public class FileChannelDemo {

    public static void main(String[] args) {
        //通过RandomAccessFile读取文件 通道处理
        try {

            File file = new File("d://321.txt");

            FileInputStream fileInputStream = new FileInputStream(file);
            fileInputStream.getChannel();

            FileOutputStream fileOutputStream = new FileOutputStream(file);
            fileOutputStream.getChannel();

            RandomAccessFile rf = new RandomAccessFile("d://321.txt", "rw");
            FileChannel fc = rf.getChannel();

            //读出文件内容
            long start = System.currentTimeMillis();
            ByteBuffer buffer = ByteBuffer.allocate(6);
            fc.read(buffer);
            byte[] b = buffer.array();
            System.out.println(new String(b));
            System.out.println(System.currentTimeMillis() - start);

            //写入文件内容
            buffer.clear();
            buffer.put("拉拉".getBytes());
            buffer.flip();
            fc.write(buffer);

            buffer.clear();
            rf.close();
            fc.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
